message anatomy
Every GraphicsDesigner message contains 8 XLONG values:

( window, message, v0, v1, v2, v3, r0, r1 )
... or ...
( grid, message, v0, v1, v2, v3, r0, r1 )
... or ...
( wingrid, message, v0, v1, v2, v3, r0, r1 )

window, grid, wingrid
window contains the window number the message refers to.

grid contains the grid number the message refers to.

wingrid contains the window or grid number a message refers to. wingrid is the name given to arguments that contain a window number in some contexts, and a grid number in others.

message AKA message number
message contains a message number. Message numbers are initially based on strings like "MouseDown " , but messages contain message numbers so programs must get the message number for every message they use when they start up and assign them to similar named variables like #MouseDown .

The message number for any message name string is returned by two functions, the only difference being that XgrRegisterMessage() creates a new message number for message names that don't already exist, while XgrMessageNameToNumber() returns zero, which is an invalid message number.

XgrRegisterMessage ( messsage$, @message )
XgrMessageNameToNumber ( message$, @message )

v0,v1,v2,v3,r0,r1
v0 ,v1 ,v2 ,v3 ,r0 ,r1 contain message arguments whose meanings depend on message . For example, in mouse messages v0,v1,v2,v3,r0,r1 contain x,y,state,time,0,0 .

In some messages, one or more arguments contains no defined value. GraphicsDesigner and GuiDesigner always fill these arguments with zero when calling other programs, and expect to receive zeros in these arguments from other programs.